package com.zfj.controller;

import com.zfj.entities.Payment;
import com.zfj.result.CommonResult;
import com.zfj.service.PaymentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author zfj
 * @date 2022/5/10 -16:20
 */
@RestController
@RequestMapping
@Slf4j
@Api(value = "支付", tags = "支付" )
public class PaymentController {
	@Autowired
	private PaymentService paymentService;

	@Value("${server.port}")
	private String serverPort;

	@Resource
	private DiscoveryClient discoveryClient;

	@PostMapping("/payment/creat")
	@ApiOperation(value = "加入数据", notes = "加入数据")
	public CommonResult<Payment> creat(@RequestBody Payment payment){
		int result = paymentService.create(payment);
		log.info("****插入结果：{}",result);
		if(result>0){
			return new CommonResult(200,"插入成功,端口号："+serverPort,result);
		}else {
			return new CommonResult(444,"插入失败");
		}
	}

	@GetMapping("/payment/get/{id}")
	@ApiOperation(value = "查询数据", notes = "查询数据")
	public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
		Payment payment = paymentService.getPaymentById(id);
		log.info("****插入结果：{}",payment);
		if(payment!=null){
			return new CommonResult(200,"查询成功,端口号："+serverPort,payment);
		}else {
			return new CommonResult(445,"没有对应记录,查询ID："+id,null);
		}
	}

	//说明
	@GetMapping("/payment/discovery")
	public Object discovery(){
		List<String> services = discoveryClient.getServices();
		for (String element : services) {
			log.info("******element***:"+element);
		}
		List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
		for (ServiceInstance instance : instances) {
			log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
		}
		return this.discoveryClient;
	}

	@GetMapping("/payment/lb")
	public String getPaymentLB(){
		return serverPort;
	}


	@GetMapping("/payment/feign/timeout")
	public String paymentFeignTimeout(){
		//暂停
		try {
			TimeUnit.SECONDS.sleep(3);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return serverPort;
	}

	@GetMapping("/payment/zipkin")
	public String PaymentZipkin(){
		return "hi im zipkin PaymentZipkin server fall back ,welcome to ningxia";
	}
}
